Zum Hauptinhalt springen

Einheit 10 — Ändern ohne kaputtmachen

Was du nach dieser Einheit weißt: Du änderst bestehende Workflows, ohne dass Agents ihre Identität, ihre Nachrichtenhistorie und ihre Canvas-Position verlieren — und du kennst die eine Regel, die darüber entscheidet.

Einen Workflow neu anzulegen ist einfach. Einen laufenden Workflow zu ändern, ist die eigentliche Disziplin. Dabei geht es um Dinge, die man erst vermisst, wenn sie weg sind: Agent-IDs, auf die anderswo verwiesen wird, Nachrichtenhistorie, Log-Historie, Canvas-Positionen.

Zwei Werkzeuge, zwei Anlässe

agent_updateworkflow_update
Ändertgenau einen Agentden ganzen Workflow aus TowelScript
Nutze, wenneine Option, ein Name, eine VerbindungStruktur, mehrere Agents, neue Nodes
Risikogeringmittel — siehe unten

agent_update für punktuelle Änderungen

Mit merge_options: true änderst du eine einzelne Option, ohne die anderen anzufassen:

{
"agent_id": 1901,
"options": { "prompt_template": "Fasse zusammen: {{ message.payload.text }}" },
"merge_options": true
}
merge_options nicht vergessen

Ohne merge_options: true werden die Optionen ersetzt, nicht ergänzt. Alles, was du nicht mitgeschickt hast, ist weg. Bei einem Agent mit zwölf Optionen ist das ein teurer Tippfehler.

agent_update kann außerdem:

ParameterZweck
nameAgent umbenennen
disabledAgent vorübergehend stilllegen — nützlich beim Debuggen
source_ids / receiver_idsVerbindungen umhängen
scheduleZeitplan setzen
retry_attempts, retry_delay, retry_exponential_backoffWiederholverhalten
failure_receiver_idsWohin im Fehlerfall — die Fehlerbehandlung aus Kurs 5, Einheit 6
pos_x, pos_y (mit workflow_id)Canvas-Position
keep_messages_forAufbewahrungsdauer von Nachrichten

workflow_update für strukturelle Änderungen

workflow_update kompiliert den Quelltext neu und gleicht den Workflow damit ab:

  • Bestehende Agents werden anhand ihrer GUID an Ort und Stelle aktualisiert
  • Agents, die im Quelltext nicht mehr vorkommen, werden entfernt
  • Verbindungen werden auf den Stand des Quelltexts gebracht

Das klingt harmlos. Der Haken steckt in „anhand ihrer GUID".

Die Regel: die GUID hängt an der Position

TowelScript vergibt Agent-GUIDs deterministisch — abgeleitet unter anderem aus der Position der Node-Deklaration im Flow-Block. Nicht aus dem Namen allein.

Die Folge: Fügst du einen Node in der Mitte ein, verschieben sich alle dahinter. Ihre GUIDs ändern sich. Und workflow_update erkennt sie nicht mehr wieder — es löscht die alten Agents und legt neue an.

Ein Beispiel

Ausgangszustand, drei Nodes:

flow kontaktanfrage {
node eingang: form { … } // Agent-ID 1900
node extrahieren: ai { … } // Agent-ID 1901
node anlegen: http.post { … } // Agent-ID 1902
eingang -> extrahieren -> anlegen
}

Jetzt soll eine Prüfung dazwischen. Der naheliegende Weg:

flow kontaktanfrage {
node eingang: form { … }
node extrahieren: ai { … }
node pruefen: filter { … } // ← in der Mitte eingefügt
node anlegen: http.post { … }
eingang -> extrahieren -> pruefen -> anlegen
}

Ergebnis nach workflow_update:

Nodevorhernachher
eingang19001900✅ erhalten
extrahieren19011901✅ erhalten
pruefen1903neu, korrekt
anlegen19021904❌ gelöscht und neu angelegt

anlegen hat eine neue ID und eine neue GUID. Seine Nachrichten- und Log-Historie ist weg, seine Canvas-Position ebenfalls. In einem Workflow mit zwanzig Nodes trifft das alles ab der Einfügestelle.

Der richtige Weg: hinten anhängen

Die Reihenfolge der Deklarationen muss nicht der Reihenfolge im Fluss entsprechen. Die Reihenfolge steckt in der Verbindungskette — sonst nirgends.

flow kontaktanfrage {
node eingang: form { … }
node extrahieren: ai { … }
node anlegen: http.post { … } // bleibt an Position 3
node pruefen: filter { … } // ← hinten angehängt
eingang -> extrahieren -> pruefen -> anlegen
}

Ergebnis: anlegen behält GUID und ID. pruefen kommt neu dazu. Die Kette läuft trotzdem eingang → extrahieren → pruefen → anlegen.

Die Merkregel

Neue Nodes ans Ende des Flow-Blocks. Die Reihenfolge lebt in der Verbindungskette, nicht in der Deklarationsreihenfolge.

Das sieht beim Lesen weniger schön aus — die Kette am Ende sagt aber ohnehin klarer, was passiert, als die Reihenfolge der Blöcke. Und es ist der Unterschied zwischen einem sauberen Update und einem halben Workflow, der neu angelegt wird.

Wie du das vorher siehst

towelscript_compile gibt zu jedem Agent die GUID aus. Vergleiche sie mit denen aus workflow_show, bevor du updatest:

„Kompiliere den geänderten Quelltext und vergleiche die Agent-GUIDs mit denen des deployten Workflows 134. Welche Agents würden neu angelegt?"

Alle GUIDs, die sich unerwartet unterscheiden, sind Agents, die verloren gehen.

📸 Screenshot: [Platzhalter — GUID-Vergleich: compile-Ausgabe neben workflow_show, geänderte GUIDs hervorgehoben]

Zwei weitere Stolperstellen

name und description werden zurückgesetzt

workflow_update ohne name benennt den Workflow in „Workflow" um. Ohne description wird die Beschreibung geleert.

Gib beide bei jedem Update mit:

{
"workflow_id": 134,
"source": "module academy …",
"name": "Kurs 6 | Kontaktanfrage aus Freitext",
"description": "Nimmt einen E-Mail-Text entgegen, extrahiert den Absender per KI und legt ihn in der Kontakt-API an."
}

Das Canvas-Layout überlebt ein Update nicht immer

Agents, die ihre GUID behalten, behalten auch ihre Position. Neu angelegte Agents landen auf dem Standardplatz. Nach einem strukturellen Update lohnt ein Blick in den Designer.

Die sichere Änderungsroutine

1. workflow_export           → aktuellen Stand sichern
2. Quelltext ändern → neue Nodes ans Ende
3. check / compile / graph → Syntax, Optionen, Kanten
4. GUIDs vergleichen → wer würde neu angelegt?
5. workflow_update → mit name UND description
6. workflow_show → sources/receivers gegenprüfen
7. message_reemit → mit echten Daten nachtesten

Bei größeren Umbauten ist der noch sicherere Weg: workflow_duplicate, am Duplikat arbeiten, und erst umschalten, wenn es läuft.

Versionierung

Weil TowelScript Text ist, gehört er in ein Git-Repository — genau wie in Modul 3, Einheit „Versionsverwaltung mit Git" beschrieben, nur dass du hier die Quelle versionierst und nicht den Export.

Ein bewährter Aufbau:

workflows/
kontaktanfrage.towel
rechnungseingang.towel
exports/
kontaktanfrage-2026-09-19.json
CLAUDE.md

In die CLAUDE.md gehören die Regeln, die du nicht jedes Mal wiederholen willst — zum Beispiel: immer check/compile/graph vor dem Deploy, neue Nodes ans Ende, name und description bei jedem Update, vor dem Löschen exportieren.

Zusammengefasst

RegelWarum
Neue Nodes ans Ende des Flow-BlocksGUIDs hängen an der Deklarationsposition
Reihenfolge nur in der Verbindungskette ausdrückenSie ist die einzige Quelle für den Ablauf
GUIDs vor dem Update vergleichenZeigt vorher, welche Agents verloren gehen
name und description immer mitgebenSonst heißt der Workflow „Workflow"
merge_options: true bei agent_updateSonst werden alle anderen Optionen gelöscht
Vor dem Update exportierenDer einzige Rückweg
Quelltext in GitWas sich geändert hat, steht dann im Diff

Weiter: Übung — Fehlersuche im laufenden Workflow